# -*- coding = utf-8 -*-
# @Time : 2021/8/10 20:04
# @Author : 龙王赘婿_彪少
# @File : meizi3.py
# @Software: PyCharm

# 爬取妹子图片

# 正则表达式.Beautiful Soup.Lxml都是解析网页用的
import urllib.request, urllib.error
from lxml import html
from bs4 import BeautifulSoup  # 网页解析
import os
import re
import requests
import time


# 这个标头是防止反爬的，
# 1.headers伪装，服务器使用这个判断你使用的浏览器，当有这个的时候，服务器会认为是浏览器正常的请求。
# 2.Referer：浏览器通过此来判断你从哪一个网页跳转过来。
# 3.Cookie伪装，cookie是服务器用来辨别你此时的状态的，比如你已经登录啊，什么的，每一次向服务器请求cookie都会随之更新。
def header_plus():
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
        'cookie': 'Hm_lvt_cb7f29be3c304cd3bb0c65a4faa96c30=1626761071; Hm_lpvt_cb7f29be3c304cd3bb0c65a4faa96c30=1627519587',
        'Referer': 'http: // www.sky - robotics.cn /'
    }
    return headers


# 这个标头是简单的，仅告诉浏览器类型
def header():
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    }
    return headers


'''
函数名：    connetion
入口参数：   url 链接网络字符串
返回值：    content
功能：     
'''


def getHtml(url):
    # 获取标头
    headers = header()
    # 打包一个请求
    request = urllib.request.Request(url=url, headers=headers, method="GET")
    # 接收字符串
    html = ""
    try:
        # 进行请求
        resource = urllib.request.urlopen(request, timeout=10)
        # 解码
        html = resource.read().decode("utf-8")
        # 测试打印
        # print(html)
    # 万一出现问题进行处理
    except urllib.error.URLError as e:
        if hasattr(e, "code"):
            print(e.code)
        if hasattr(e, "reason"):
            print(e.reason)
    return html


if __name__ == '__main__':
    print('begin')
    # 要爬取的网页
    # url = 'http://www.pptok.com/the-tempting-fruit-ppt-background.html'
    # url = 'http://www.sky-robotics.cn/'

    # 方式A：把爬取到的网页保存成html
    # file = open("./my.html", mode="w")
    # file.write(getHtml(url))
    # file.close

    # 变量，计数
    count = 0
    # 构建一个正则表达式
    pat = re.compile(".jpg")
    # 图片保存路径
    path = '../../download2/'

    imgs = []

    print('开始爬取网页')
    # 方式B：把爬取到的网页保存成str
    for i in range(101, 200):
        try:
            # 延时防止反爬
            print('第'+str(i)+'页')
            time.sleep(0.01)
            url = 'https://mm.enterdesk.com/' + str(i) + '.html'
            html = getHtml(url)
            # 构建解析
            soup = BeautifulSoup(html, "lxml")
            # 打印所有
            # print(soup.prettify())
            # 找出所有<img>
            imgs += soup.find_all('img')
            # print(imgs)
        except:
            print("some error")

    # 循环拿出单个<img>
    for img in imgs:
        # 因为有一些是png的小图标，我们用正则滤除
        if (pat.search(img.get('src'))):
            # 延时防止反爬
            time.sleep(0.01)
            # 打印路径
            # print(img.get('src'))
            print('正在爬取：' + img.get('title') + img.get('src'))

            # 方式A，用下面这个函数拷贝网页内容至
            # urllib.request.urlretrieve(img.get('src'), path + str(img.get('title')) + ".jpg")
            # urllib.request.urlretrieve(img.get('src'), path + str(count) + ".jpg")

            # 方式B：更保险的办法
            try:
                req = requests.get(url=img.get('src'), headers=header(), timeout=10)
                # f = open(path + str(count) + ".jpg", 'wb')
                f = open(path + str(img.get('title')) + ".jpg", 'wb')
                f.write(req.content)
                f.close()
            except:
                print("some error")

            # 计数增加
            count = count + 1

    print("end")
